
/**
 * 设计一个高效算法，将顺序表L的顺序逆置，要求算法的空间复杂度为O(1)
 * @return
 */
#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 100
typedef struct Arr {
    int data[MAXSIZE];
    int length;
} arr;

/**
 * 倒置方法
 * @param L
 */
void reverse(arr *L);
/**
 * 遍历数组打印
 * @param L
 * @param i
 */
void printList(arr *L);

int main() {
    //创建一个数组
    arr *L;
    L = (arr *) malloc(sizeof(arr));
    printf("请输入表元素个数：");
    scanf("%d", &L->length);
    printf("请输入元素值：");
    for (int i = 0; i < L->length; i++) {
        scanf("%d", &L->data[i]);
    }
    printf("\n打印看下：\n");
    //遍历数组打印
    printList(L);
    //逆序
    reverse(L);
    printf("\n倒序后：\n");
    //遍历数组打印
    printList(L);
    printf("\n--程序结束正常---");
    return 0;
}

void printList(arr *L) {
    for (int i = 0; i < L->length; i++) {
        printf("%d ", L->data[i]);
    }
}

void reverse(arr *L) {
    int p = L->length / 2;
    int tmp;
    for (int j = 0; j < p; j++) {
        tmp = L->data[j];;
        L->data[j] = L->data[L->length - 1 - j];
        L->data[L->length - 1 - j] = tmp;
    }
}

//**********使用clion运行结果:****************
//7
//11
//22
//55
//44
//77
//63
//10
//请输入表元素个数：请输入元素值：
//打印看下：
//11 22 55 44 77 63 10
//倒序后：
//10 63 77 44 55 22 11
//--程序结束正常---
//Process finished with exit code 0